#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""异常处理器模块
提供统一的异常处理功能"""

import traceback
from .logger import Logger

class ExceptionHandler:
    """异常处理器
    提供统一的异常处理功能"""
    
    @classmethod
    def handle_exceptions(cls, func):
        """异常处理装饰器
        
        Args:
            func: 要装饰的函数
            
        Returns:
            wrapper: 装饰后的函数
        """
        def wrapper(*args, **kwargs):
            try:
                return func(*args, **kwargs)
            except Exception as e:
                # 获取函数信息
                func_name = func.__name__
                class_name = args[0].__class__.__name__ if args and hasattr(args[0], '__class__') else 'UnknownClass'
                
                # 记录异常信息
                error_message = f"{class_name}.{func_name} 执行异常: {str(e)}"
                Logger.log_error(error_message)
                Logger.log_error(f"异常栈: {traceback.format_exc()}")
                
                # 返回默认值
                return False
        
        # 保留原函数的元数据
        wrapper.__name__ = func.__name__
        wrapper.__doc__ = func.__doc__
        wrapper.__module__ = func.__module__
        
        return wrapper
    
    @classmethod
    def catch_exceptions(cls, default_return=False):
        """异常捕获装饰器
        
        Args:
            default_return: 异常发生时的默认返回值
            
        Returns:
            decorator: 装饰器函数
        """
        def decorator(func):
            def wrapper(*args, **kwargs):
                try:
                    return func(*args, **kwargs)
                except Exception as e:
                    # 记录异常信息但不中断程序
                    Logger.log_error(f"{func.__name__} 捕获异常: {str(e)}")
                    return default_return
            
            # 保留原函数的元数据
            wrapper.__name__ = func.__name__
            wrapper.__doc__ = func.__doc__
            wrapper.__module__ = func.__module__
            
            return wrapper
        
        return decorator

# 独立的异常处理函数
def handle_exception(exception, context=None):
    """处理异常并记录错误信息
    
    Args:
        exception: 异常对象
        context: 异常发生的上下文信息
        
    Returns:
        None
    """
    error_message = str(exception)
    if context:
        error_message = f"{context}: {error_message}"
        
    # 记录异常信息
    Logger.log_error(error_message)
    Logger.log_error(f"异常栈: {traceback.format_exc()}")
    
    # 简单地打印异常信息，便于调试
    print(f"ERROR: {error_message}")
    print(f"TRACEBACK: {traceback.format_exc()}")